package com.punch.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.punch.common.dto.user.student.StudentDTO;
import com.punch.common.page.PageInfo;
import com.punch.common.query.user.student.StudentForAppQueryInfo;
import com.punch.common.query.user.student.StudentQueryInfo;
import com.punch.common.vo.user.student.StudentPageForAppVO;
import com.punch.common.vo.user.student.StudentPageVO;
import com.punch.user.model.SysStudent;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 学生信息表
 *
 * @author tanchangguo
 * @email 17607195327@163.com
 * @date 2020-07-21 19:10:02
 */
public interface StudentService extends IService<SysStudent> {

    /**
     * 学生分页列表
     *
     * @param queryInfo 查询信息
     * @return PageInfo<StudentPageVO>
     */
    PageInfo<StudentPageVO> queryPage(StudentQueryInfo queryInfo);

    /**
     * 新增学生
     *
     * @param studentDTO 学生表单
     * @return 学生id
     */
    Long saveStudent(StudentDTO studentDTO);


    /**
     * 修改学生
     *
     * @param studentDTO 学生表单
     */
    void updateStudent(StudentDTO studentDTO);

    /**
     * 删除学生
     *
     * @param studentId 学生id
     */
    void deleteStudent(Long studentId);

    /**
     * 学生分页列表
     *
     * @param studentForAppQueryInfo 查询信息
     * @return PageInfo<StudentPageVO>
     */
    PageInfo<StudentPageForAppVO> queryPageForApp(StudentForAppQueryInfo studentForAppQueryInfo);

    /**
     * 学生启用/停用
     *
     * @param studentId 学生id
     */
    void enableStudent(Long studentId);

    /**
     * 学生导入
     *
     * @param file 文件流
     */
    void importStudent(MultipartFile file);

    /**
     * 学校年级下学生报班信息导出
     *
     * @param schoolName 学校名称
     * @param gradeYear  年级
     * @param gradeClass 班级
     * @param className  课程名称
     */
    void exportClassStudent(String schoolName, Integer gradeYear, String gradeClass, String className, HttpServletResponse response) throws IOException;

    /**
     * 远程调用学生列表
     *
     * @param schoolId    学校id
     * @param studentName 学生姓名
     * @param currPage
     * @param pageSize
     * @return List<StudentPageVO>
     */
    PageInfo<StudentPageVO> feignStudentList(Long schoolId, String studentName, Integer currPage, Integer pageSize);


    void handlerStudentArea();
}

